﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using Pulsar.ClienteWcf.Persistencia;
using Pulsar.ClienteWcf.Dominio;
using System.ServiceModel.Web;
using Pulsar.ClienteWcf.Exceptions;
using System.Net;
using System.Messaging;

namespace Pulsar.ClienteWcf
{
  
    public class Clientes : IClientes
 
   {
        private ClienteDAO dao = new ClienteDAO();
        
        public Cliente CrearCliente(Cliente clienteACrear)
            {
                Cliente cliente_valido = new Cliente();
                cliente_valido = dao.Obtener(clienteACrear.id_cliente);

                if (cliente_valido != null)
                {
                    throw new WebFaultException<ClienteException>(new ClienteException() { Message = "El ID " + clienteACrear.id_cliente + " ya existe." }, HttpStatusCode.BadRequest);
                }

                return dao.Crear(clienteACrear);

            }




        public Cliente ObtenerCliente(string idcliente)
            {
                return dao.Obtener(idcliente);
            }



        public Cliente ModificarCliente(Cliente clienteAmodificar)
            {
                
            Cliente cliente_valido = new Cliente();
            cliente_valido = dao.Obtener(clienteAmodificar.id_cliente);

                if (cliente_valido != null)
                {
                    throw new WebFaultException<ClienteException>(new ClienteException() { Message = "El ID " + clienteAmodificar.id_cliente + " ya existe." }, HttpStatusCode.BadRequest);
                }

                return dao.Modificar(clienteAmodificar);
            }




        public List<Cliente> ListarClientes()
            {
                return dao.ListarTodos();
            }

        public void EliminarCliente(string idcliente)
            {
                Cliente clienteAEliminar = ObtenerCliente(idcliente);
                dao.Eliminar(clienteAEliminar);
            }


        public String ColaClienteRegistraPost(Cliente _clienteACrearCola)
        {

            String rep;
            rep = "Registrado";

            try
            {

                string rutaColaIn = @".\private$\clientes";
                    if (!MessageQueue.Exists(rutaColaIn))
                        MessageQueue.Create(rutaColaIn);
                    MessageQueue colaIn = new MessageQueue(rutaColaIn);
                Message mensajeIn = new Message();
                mensajeIn.Label = "ColaClientes";
                mensajeIn.Body = new Cliente() { id_cliente = _clienteACrearCola.id_cliente, Nombre = _clienteACrearCola.Nombre, 
                                                Ap_paterno = _clienteACrearCola.Ap_paterno, Ap_materno = _clienteACrearCola.Ap_materno,
                                                dni = _clienteACrearCola.dni , dir = _clienteACrearCola.dir,
                                                password = _clienteACrearCola.password , tipo_usu = _clienteACrearCola.tipo_usu};
                colaIn.Send(mensajeIn);


            }

            catch
            {
                rep = "ERROR";
            }

            return rep;
        }

    }
}

